/*
 * IRrecvDemo-LED
 * =====================功能说明=====================
 * 演示如何利用Arduino开发板接收红外遥控器控制信号，
 * 并利用接受到的信号遥控Arduino开发板上的红外LED。
 * Arduino所接收到的红外遥控器信号内容也将通过串口监视器显示出来。
 * 
 * 本程序基于Ken Shirriff开发的IRremote库。如需获得该库文件
 * 可前往以下网址获得：
 * http://arcfn.com （Ken Shirriff个人博客）                              
 * http://www.taichi-maker.com/homepage/download/  （太极创客官网）
 * 
 * =====================电路连接======================
 *   红外接收器 1838B OUT 引脚 ---  Arduino Uno 11  引脚 
 *   红外接收器 1838B VCC 引脚 ---  Arduino Uno +5V 引脚 
 *   红外接收器 1838B GND 引脚 ---  Arduino Uno GND 引脚 
 *         
 *  如需获得详细电路连接说明图，请参阅太极创客网站:
 *  http://WWW.TAICHI-MAKER.COM
 * 
 * 此示例程序为配合太极创客制作的
 * 《零基础入门学用ARDUINO教程-智能应用篇》使用
 * 
 */
 
#include <IRremote.h>
#define  RECV_PIN 11
 
IRrecv irrecv(RECV_PIN);   // 红外遥控初始化
decode_results results;   // 储存接收到的红外遥控信息
 
void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);     
  Serial.begin(9600);
  Serial.println("Enabling IRin");
  irrecv.enableIRIn();     // 启动红外接收
  Serial.println("Enabled IRin");
}
 
void loop() {
  /* 
  decode()库函数用于判断红外接收器所接收到的红外信号是否可以被解析。
  如可以成功解析，则返回非零数值。并将解析结果存储于results中。
  如无法成功解析，则返回零。
  
  每一次解析完成，都需要调用resume()函数从而让Arduino开始准备接收下一个红外
  遥控指令。
  */
  if (irrecv.decode()) {
    unsigned long result = irrecv.decodedIRData.decodedRawData;  
    Serial.println(result, HEX);  // results.value为红外遥控信号的具体数值

    if(result == 0xF40B654C) //如果控制信息数值为F7C03F
    {          
        Serial.println("Command Received: Turn On LED.");
        digitalWrite(LED_BUILTIN, HIGH); 
    } 
    
    if(result == 0xF10E654C) //如果控制信息数值为F740BF
    {          
        Serial.println("Command Received: Turn Off LED.");
        digitalWrite(LED_BUILTIN, LOW); 
    }
    
    irrecv.resume(); // 恢复接收下一个红外遥控信号

  }
  delay(100);
}
